class Solution 
{
public:
	int maxProfit(vector<int>& prices, int fee) 
	{
		vector<vector<size_t >>  dp(prices.size(), vector<size_t>(2, 0));
		
		dp.front()[1] = -prices.front();
		for (size_t i = 1; i < prices.size(); i++)
		{
			dp[i][0] = max(dp[i - 1][0], dp[i - 1][1] + prices[i] - fee);
			dp[i][1] = max(dp[i - 1][1], dp[i - 1][0] - prices[i]);
		}
		return dp.back()[0];
	}
};